package cn.pdx.elec.web.action;


import java.util.List;

import cn.pdx.elec.container.ServiceProvider;
import cn.pdx.elec.service.ElecLogService;
import cn.pdx.elec.service.ElecSystemDDlService;
import cn.pdx.elec.service.ElecUserService;
import cn.pdx.elec.web.form.ElecSystemDDlForm;
import cn.pdx.elec.web.form.ElecUserForm;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;

/**
 * implements ModelDriven<T>实现这个接口，泛型
 * ModelDriven<ElecUserForm>表示这个表单对象
 * @author 彭定旭
 *
 */
@SuppressWarnings("serial")
public class ElecUserAction extends BaseAction implements  ModelDriven<ElecUserForm>{
    
	/**
	 * 创建一个表单对象，对应页面的属性的对象
	 */
	private ElecUserForm elecUserForm=new ElecUserForm();
	
	/**
	 * 使用方法调用ElecUserService.SERVICE_NAME 接口
	 */
	@SuppressWarnings("unused")
	private ElecUserService elecUserService=(ElecUserService) ServiceProvider.getService(ElecUserService.SERVICE_NAME);
	
	
	/**
	 * 调用elecSystemDDlService来处理数据字典,因为在添加信息的时候要把数据库里的数据字典查询出来
	 */
	@SuppressWarnings("unused")
	private ElecSystemDDlService elecSystemDDlService=(ElecSystemDDlService) ServiceProvider.getService(ElecSystemDDlService.SERVICE_NAME);
	
	/**
	 * 调用elecLogService来处理日志
	 */
	@SuppressWarnings("unused")
	private ElecLogService elecLogService=(ElecLogService) ServiceProvider.getService(ElecLogService.SERVICE_NAME);

	public ElecUserForm getModel() {
		
		return elecUserForm;
	}
    
	
	/**
	 * @Name:home
	 * @Description:查询用户信息
	 * @author 彭定旭
	 * @version：v1.00（版本号）
	 * @Create Date:2013-4-3(创建日期)
	 * @parameters:无
	 * @return:String home 跳转到userIndex.jsp
	 */
	public String home()
	{
		
		List<ElecUserForm> list=elecUserService.findElecUserList(elecUserForm);
		
		request.setAttribute("userList", list);
		
		return "home";
	}
	
	
	/**
	 * @Name:add
	 * @Description:添加用户
	 * @author 彭定旭
	 * @version：v1.00（版本号）
	 * @Create Date:2013-4-3(创建日期)
	 * @parameters:无
	 * @return:String add 跳转到userAdd.jsp
	 */
	public String add()
	{
		
		/**
		 * 封装一个方法,下面好调用
		 */
		this.initSystemDDl();
		
		return "add";
	}
	
	
	/**
	 * @Name:initSystemDDl
	 * @Description:封装查询数据字典方法
	 * @author 彭定旭
	 * @version：v1.00（版本号）
	 * @Create Date:2013-4-5(创建日期)
	 * @parameters:无
	 * @return:无
	 */
	private void initSystemDDl() {
		
		/**
		 * 使用数据类型进行查询,获取对应数据类型下的数据编号和数据项名称
		 * 查询性别、所属单位、是否在职
		 */
		//性别
		List<ElecSystemDDlForm> sexList=elecSystemDDlService.findElecSystemDDlListByKeyword("性别");
		
		//所属单位
		List<ElecSystemDDlForm> jctList=elecSystemDDlService.findElecSystemDDlListByKeyword("所属单位");
		
		//是否在职
		List<ElecSystemDDlForm> isDutyList=elecSystemDDlService.findElecSystemDDlListByKeyword("是否在职");
		
		request.setAttribute("sexList", sexList);
		request.setAttribute("jctList", jctList);
		request.setAttribute("isDutyList", isDutyList);
	}


	/**
	 * @Name:save
	 * @Description:保存用户
	 * @author 彭定旭
	 * @version：v1.00（版本号）
	 * @Create Date:2013-4-3(创建日期)
	 * @parameters:无
	 * @return:String save 重定向到userIndex.jsp
	 */
	  public String save()
	  {
		  
		  elecUserService.saveElecUser(elecUserForm);
		  
		  /**
		   * 日志管理模块
		   * @Create Date:2013-4-25
		   * 将添加信息、修改信息写入日志列表中
		   */
		  
		  if(elecUserForm.getUserID()!=null && !elecUserForm.getUserID().equals(""))
		  {
			  //修改保存
			  elecLogService.saveElecLog(request, "用户管理：修改当前用户【"+elecUserForm.getUserName()+"】信息！");
		  }
		  else {
			
			  //新增保存
			  elecLogService.saveElecLog(request, "用户管理：新增用户【"+elecUserForm.getUserName()+"】信息！");
		  }
		  
		  /**
	         * 当roleflag==1的时候,需要重定向到userEdit.jsp
	         * 当roleflag==null的时候,需要重定向到userIndex.jsp
			 * @Create Date:2013-4-24
			 */
		  String roleflag=request.getParameter("roleflag");
		  if(roleflag!=null && roleflag.equals("1"))
		  {
			 return edit();
		  }
		  
		  return "list";
	  }
	
	  
	  /**
		 * @Name:edit
		 * @Description:编辑用户
		 * @author 彭定旭
		 * @version：v1.00（版本号）
		 * @Create Date:2013-4-5(创建日期)
		 * @parameters:无
		 * @return:String edit 跳转到userEdit.jsp
		 */
		public String edit()
		{
			elecUserForm=elecUserService.findElecUser(elecUserForm);
			
			//使用值栈的形式传递elecUserForm对象,只要是struts标签都可以用这个值栈
			//ActionContext.getContext().getValueStack().push(elecUserForm);
			
			//获取页面编辑的数据字典rr
			this.initSystemDDl();
			
			/**
			 * 使用viewflag字段判断当前用户是编辑还是明细
			 * 如果viewflag=1是明细页面,隐藏保存按钮
			 * 如果viewflag=null是编辑页面
			 * @Create Date:2013-4-7
			 */
			String viewflag=elecUserForm.getViewflag();
			request.setAttribute("viewflag", viewflag);
			
			/**
			 * 判断点击左侧"用户管理的连接"
			 * 如果当前操作人是系统管理员或者是高级管理员的时候,则点击"用户管理"的时候跳转到userIndex.jsp,可以查看用户列表信息
	         * 如果当前操作人不是系统管理员或者不是高级管理员的时候,则点击"用户管理"的时候跳转到userEdit.jsp,可以对当前登录人进行编辑并保存
	         * 如果跳转到userEdit.jsp,点击"保存"的时候,需要重定向到userEdit.jsp,此时设置重定向标识使用roleflag,
	         * 当roleflag==1的时候,需要重定向到userEdit.jsp
	         * 当roleflag==null的时候,需要重定向到userIndex.jsp
			 * @Create Date:2013-4-24
			 */
			String roleflag=elecUserForm.getRoleflag();
			request.setAttribute("roleflag", roleflag);
			return "edit";
		}
		
		
		 /**
		 * @Name:delete
		 * @Description:删除用户
		 * @author 彭定旭
		 * @version：v1.00（版本号）
		 * @Create Date:2013-4-6(创建日期)
		 * @parameters:无
		 * @return:String lit 重定向到userIndex.jsp
		 */
		public String delete()
		{
			
			elecUserService.deleteElecUser(elecUserForm);
			
			return "list";
		}
}
